﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Model;
using Service;
using ItaServicosWEB.Controllers;
using System.Web.Security;
using Microsoft.Reporting.WebForms;

namespace ItaServicos.Controllers
{
    public class ClienteController : Controller
    {
        private GerenciadorCliente gCliente;
      

        public ClienteController()
        {
            gCliente = new GerenciadorCliente();
         
            
        }


        //
        // GET: /Cliente/
        [HttpGet] [Authorize(Roles="cliente,Prestador")]
        public ActionResult Index()
        {

           
            return View();
        }

        
        //
        // GET: /Cliente/Create
        [HttpGet]
        public ActionResult Create()
        {
           

            return View();
        }



        //
        // POST: /Cliente/Create

        [HttpPost]
        public ActionResult Create(ClienteModel cliente)
        {

            try
            {
                if (ModelState.IsValid)
                {

                    AccountController conta = new AccountController();

                    conta.Register(cliente.clogin,cliente.csenha,cliente.cemail,"Cliente");
                    gCliente.Inserir(cliente);
                    return RedirectToAction("Index");

                }

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }


        [HttpGet]
        [Authorize(Roles = "Cliente")]
        public ActionResult SerPrestador()
        {

            return RedirectToAction("Create", "Prestador");

        }


        //
        // GET: /Cliente/Edit/5

        [HttpGet][Authorize(Roles="CLiente,Prestador")]
        public ActionResult Edit()
        {
          

            MembershipUser usuario = Membership.GetUser();
            ClienteModel cliente = gCliente.ObterPorLogin(usuario.ToString());

              
            return View(cliente);
        }

        //
        // POST: /Cliente/Edit/5

        [HttpPost]
        public ActionResult Edit(ClienteModel cliente)
        {
            try
            {
                

                if (ModelState.IsValid)
                {
                    gCliente.Editar(cliente);
                    return RedirectToAction("Index");
                }

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Cliente/Delete/5

        [HttpGet]
        public ActionResult Delete(int id)
        {

            ClienteModel cliente = gCliente.Obter(id);
            return View(cliente);
        }

        //
        // POST: /Cliente/Delete/5

        [HttpPost]
        public ActionResult DeleteConfirmed(int id)
        {
            try
            {
                gCliente.Remover(id);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        [HttpGet]
        public ActionResult RelatorioTodosClientes()
        { 
            return View(gCliente.ObterTodos());
        }


        [HttpGet] [Authorize(Roles="Administrador")]
        public ActionResult ListaTodosCliente() 
        {


            return View(gCliente.ObterTodos());
        }
        
        
        
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }
    
    /*metodos de pesquisa*/



        public ActionResult RelatorioCliente()
        {
            LocalReport relatorio = new LocalReport();

            //Caminho onde o arquivo do Report Viewer está localizado
            relatorio.ReportPath = Server.MapPath("~/Relatórios/TodosClientes.rdlc");
            //Define o nome do nosso DataSource e qual rotina irá preenche-lo, no caso, nosso método criado anteriormente
            relatorio.DataSources.Add(new ReportDataSource("cliente", gCliente.ObterTodos()));

            string reportType = "PDF";
            string mimeType;
            string encoding;
            string fileNameExtension;

            string deviceInfo =
             "<DeviceInfo>" +
             " <OutputFormat>PDF</OutputFormat>" +
             " <PageWidth>9in</PageWidth>" +
             " <PageHeight>11in</PageHeight>" +
             " <MarginTop>0.7in</MarginTop>" +
             " <MarginLeft>2in</MarginLeft>" +
             " <MarginRight>2in</MarginRight>" +
             " <MarginBottom>0.7in</MarginBottom>" +
             "</DeviceInfo>";

            Warning[] warnings;
            string[] streams;
            byte[] bytes;

            //Renderiza o relatório em bytes
            bytes = relatorio.Render(
            reportType,
            deviceInfo,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);

            return File(bytes, mimeType);

        }
    
    
    
    
    
    }
}
